left
详情
主题: Hibernate 继承关系实现表--每个类一张表 返回 搜索

特点:  每个类一张表,使用UUID2  ,每个类都有完整属性,包括父类。


注: 为什么使用UUID2,因为虽然看起来不是同一张表。但实际上还是同一张表。都是同一个父类。所以使用ID会重复



3.png



2.png



查看支持的类型,可以查看类,具体属于的类是: import org.hibernate.id.DefaultIdentifierGeneratorFactory




1.png




具体实现:




Animal.java


package cc.www.hibernateproject.model;

public class Animal {
  private String id;
  private String name;
  private String sex;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }

  @Override
  public String toString() {
    return "Animal [id=" + id + ", name=" + name + ", sex=" + sex + "]";
  }

  public Animal() {
    // TODO Auto-generated constructor stub
  }

}



Bird.java


package cc.www.hibernateproject.model;

public class Bird extends Animal{
  private int height;

  public int getHeight() {
    return height;
  }

  public void setHeight(int height) {
    this.height = height;
  }

  public Bird() {
    // TODO Auto-generated constructor stub
  }

  @Override
  public String toString() {
    return "Bird [height=" + height + "]";
  }

}



Pig.java


package cc.www.hibernateproject.model;

public class Bird extends Animal{
  private int height;

  public int getHeight() {
    return height;
  }

  public void setHeight(int height) {
    this.height = height;
  }

  public Bird() {
    // TODO Auto-generated constructor stub
  }

  @Override
  public String toString() {
    return "Bird [height=" + height + "]";
  }

}



Animal.hbm.xml


package cc.www.hibernateproject.model;

public class Animal {
  private String id;
  private String name;
  private String sex;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }

  @Override
  public String toString() {
    return "Animal [id=" + id + ", name=" + name + ", sex=" + sex + "]";
  }

  public Animal() {
    // TODO Auto-generated constructor stub
  }

}





hibernate.cfg.xml



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernateproject?characterEncoding=utf8&amp;amp;useSSL=false</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password">123456</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
  <property name="hibernate.show_sql">true</property>
  <property name="hibernate.format_sql">true</property>
  <!-- 选择使用C3P0连接池 -->
  <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
  <!-- 最大连接数 -->
  <property name="hibernate.c3p0.max_size">20</property>
  <!-- 最小连接数 -->
  <property name="hibernate.c3p0.min_size">5</property>
  <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
  <property name="hibernate.c3p0.timeout">120</property>
  <!-- 最大的PreparedStatement的数量 -->
  <property name="hibernate.c3p0.max_statements">100</property>
  <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒 -->
  <property name="hibernate.c3p0.idle_test_period">120</property>
  <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
  <property name="hibernate.c3p0.acquire_increment">2</property>
  <property name="hibernate.hbm2ddl.auto">update</property>


  <mapping resource="cc/www/hibernateproject/model/Animal.hbm.xml"/>

 </session-factory>
</hibernate-configuration>




StudentEntityTest.java



package cc.www.hibernatedemo.model;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.mysql.fabric.xmlrpc.base.Array;

import cc.www.hibernateproject.model.Bird;
import cc.www.hibernateproject.model.Pig;

import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.xml.transform.Source;

@SuppressWarnings("unused")
public class StudentEntityTest {
    private SessionFactory sessionFactory=null;
    private Session session =null;
    private Transaction transaction =null;
    
    @Before
    public void init(){
      //测试同步21
        //System.out.println("开始测试文件");
        //返回的configureation,包含有配置文件里的具体信息
      
        Configuration configure = new Configuration().configure();
        //创建一个SessionFactory工厂类,通过它建立一个数据库连接会话,Session
        sessionFactory= configure.buildSessionFactory();
        
        //通过工厂类开启Session对
        session = sessionFactory.openSession();
        
        //开始事务
        transaction = session.beginTransaction();
    }
    
    
    @After
    public void destroy(){
        //System.out.println("结束");
        //提交事务
        transaction.commit();
        
        //关闭
        session.close();
        
        //关闭工厂
        sessionFactory.close();
    }
    
    
    @Test
    public void test() {
      Pig pig=new Pig();
      pig.setName("小猪");
      pig.setSex("公");
      pig.setWeight(20);
      session.save(pig);
      
      Bird bird=new Bird();
      bird.setName("上鸟");
      bird.setSex("雌");
      bird.setHeight(500);
      session.save(bird);
    }
}

警告:
您是否确定删除贴子?
确定 取消
copyright